export async function hfdSend(device, JsonItem) {
    return new Promise(async (resolve, reject) => {
        let sendInterval; // 用于存储定时器
        let hasResponse = false; // 标志是否已收到响应
        
        try {
            // 如果设备未打开，先打开它
            if (!device.opened) {
                await device.open();
                console.log('设备已打开:', device.productName);
            }
            console.log('device===:', device);
            
            // 发送Report的数据准备
            const reportId = 0;
            const data = new Uint8Array(32);
            data[0] = 0xaa;
            data[1] = 0x10;
            data[2] = 0x18;
            
            console.log('准备发送sendReport到设备:', device.productName);
            console.log('Report ID:', reportId);
            console.log('Data:', data);
            
            // 添加输入报告监听器
            const inputReportHandler = (event) => {
                console.log('原始 event.data:', event.data);
                hasResponse = true; // 标记已收到响应
                
                // 清除定时器，停止重发
                if (sendInterval) {
                    clearInterval(sendInterval);
                    console.log('✓ 收到响应，停止重发');
                }
                
                // 去掉前8个字节
                const deviceArray = new Uint8Array(event.data.buffer.slice(8));
                
                console.log('去掉前8字节后的数据:', deviceArray);
                
                // 提取厂商ID（第12、13字节，小端序）
                let vendorNo = deviceArray[12] + (deviceArray[13] << 8);
                
                // 提取产品ID（第14、15字节，小端序）
                let productNo = deviceArray[14] + (deviceArray[15] << 8);
                
                console.log('厂商ID:', vendorNo, '(0x' + vendorNo.toString(16).toUpperCase() + ')');
                console.log('产品ID:', productNo, '(0x' + productNo.toString(16).toUpperCase() + ')');
                
                // 根据厂商ID和产品ID查找匹配的设备项
                const deviceId = `0x${productNo.toString(16).toUpperCase()}`;
                console.log('设备标识:', deviceId);
                
                const deviceItem = JsonItem?.deviceIds?.find(i => i.id == deviceId);
                
                // 移除事件监听器，避免重复触发
                device.removeEventListener("inputreport", inputReportHandler);
                
                if (deviceItem) {
                    resolve(deviceItem);
                } else {
                    resolve(null); // 找到厂商ID和产品ID但没有匹配的设备项
                }
            };

            // 发送Report的函数
            const sendReport = async () => {
                try {
                    await device.sendReport(reportId, data);
                    console.log('✓ Report发送成功');
                } catch (error) {
                    console.error('发送Report失败:', error);
                    // 如果发送失败，继续重试
                }
            };

            device.addEventListener("inputreport", inputReportHandler);
            
            // 首次发送
            await sendReport();
            
            // 设置定时器，每隔100ms重发一次，直到收到响应
            sendInterval = setInterval(async () => {
                if (!hasResponse) {
                    console.log('⏰ 未收到响应，重新发送...');
                    await sendReport();
                } else {
                    clearInterval(sendInterval);
                }
            }, 5000);

        } catch (error) {
            console.error('发送Report失败:', error);
            // 清除定时器
            if (sendInterval) {
                clearInterval(sendInterval);
            }
            // 移除事件监听器
            device.removeEventListener("inputreport", inputReportHandler);
            reject(error);
        }
    });
}